from app import db

class Mets(db.Model):
    __tablename__ = 'mets'

    met_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    workout_type = db.Column(db.String(50), unique=True, nullable=False)  # 运动类型
    intensity = db.Column(db.String(50))  # 运动强度
    met_value = db.Column(db.Float, nullable=False)  # 对应的MET值

    # 定义联合唯一约束，确保 workout_type 和 intensity 的组合唯一
    __table_args__ = (db.UniqueConstraint('workout_type', 'intensity', name='_workout_intensity_uc'),)



    def __repr__(self):
        return f"<Mets(workout_type={self.workout_type}, intensity={self.intensity}, met_value={self.met_value})>"

    def to_dict(self):
        """将 MET 对象转换为字典"""
        return {
            'met_id': self.met_id,
            'met_value': str(self.met_value),  # 转换为字符串以便 JSON 序列化
            'intensity': self.intensity,
            'workout_type': self.workout_type
        }


    def calculate_calories_burned(self):
        """
        根据运动的 MET 值、用户体重、运动时长来计算卡路里消耗
        公式：卡路里 = MET * 体重 (kg) * 运动时长 (小时)
        """
        if self.met and self.weight and self.duration_hours:
            # 基于 MET 值和体重计算卡路里消耗
            self.calories_burn = self.met.met_value * self.weight * self.duration_hours
            db.session.commit()



    def calculate_met_value(self, workout_type):
        """
        根据不同运动类型返回对应的 MET 值
        """
        met_values = {
            '慢速行走': 2.0,
            '家务活（轻度）': 2.0,
            '艺术和手工': 1.5,
            '台球': 2.5,
            '划船': 2.5,
            '门球': 2.5,
            '飞镖': 2.5,
            '坐着垂钓': 2.5,
            '演奏乐器': 2.0,
            '行走（4.8 km/h）': 3.0,
            '快步行走（6.4 km/h）': 5.0,
            '家务活（中等强度）': 3.0,
            '扫地': 3.0,
            '木工': 3.6,
            '推草坪': 5.5,
            '休闲羽毛球': 4.5,
            '篮球': 4.5,
            '舞厅慢舞': 3.0,
            '河边钓鱼和行走': 4.0,
            '高尔夫（拉杆）': 4.3,
            '驾驶船只': 3.0,
            '休闲游泳': 6.0,
            '乒乓球': 4.0,
            '双打网球': 5.0,
            '非竞技排球': 3.0,
            '快步行走（7.2 km/h）': 6.3,
            '徒步（无背包或轻背包）': 7.0,
            '背包徒步（上坡）': 7.5,
            '慢跑（8 km/h）': 8.0,
            '跑步（11.3 km/h）': 11.5,
            '挖沙': 7.0,
            '搬运重物': 7.5,
            '重度农耕': 8.0,
            '挖坑挖渠': 8.5,
            '平地单车（16-19 km/h）': 6.0,
            '篮球比赛': 8.0,
            '中等速度单车（19-23 km/h）': 8.0,
            '快速单车（23-26 km/h）': 10.0,
            '乡间滑雪（慢速）': 7.0,
            '跑步（8-12.7 km/h）': 9.0,
            '休闲足球': 7.0,
            '竞技足球': 10.0,
            '高强度游泳': 8.0,
            '单人网球': 8.0,
            '沙滩排球': 8.0
        }

        self.met_value = met_values.get(workout_type, 0)
        return self.met_value
